Investigación Reproducible con R

Workshop Ciencia Abierta

Eloy Alvarado Narváez

Universidad Técnica Federico Santa María

Francisco Plaza Vega

Universidad de Santiago de Chile

10 de marzo de 2025

Módulo 1: Introducción a la Investigación Reproducible

¿Qué es la Investigación Reproducible?

Investigación Reproducible

Es la práctica de conducir estudios científicos o basados en datos de tal manera que permita a otros replicar o reproducir los resultados usando los mismos datos, códigos y metodologías.

¿Qué se entiende por un estudio Reproducible y Replicable?

Reproducible

Los autores entregan todos los datos necesarios y los códigos computacionales para realizar el análisis nuevamente, recreando los resultados.

Replicable

Un estudio que llega a los mismos hallazgos científicos que otro estudio, recolectando nuevos datos (posiblemente con diferentes métodos) y completando nuevos análisis.

Clases de Reproducibilidad

  • Reproducibilidad Computacional: Cuando se proporciona información detallada sobre el código, software, hardware y detalles de la implementación

  • Reproducibilidad Empírica: Cuando se proporciona información detallada sobre experimentos y observaciones científicas empíricas no computacionales. En la práctica, esto se ocurre al hacer que los datos y los detalles de cómo se recopilaron estén disponibles de forma gratuita.

  • Reproducibilidad Estadística: Cuando se proporciona información detallada, por ejemplo, sobre la elección de pruebas estadísticas, parámetros del modelo y valores de umbral. Esto se relaciona principalmente con el registro previo del diseño del estudio para evitar la práctica de p-value hacking y otras manipulaciones.

Reproducibilidad

Reproducibilidad

Reproducible Definition Reproducible Definition2023-05-03CC-BY 4.0The Turing Wayscriberia, da5nsy, Richard J. Actonscriberia http://www.scriberia.co.uk/https://github.com/alan-turing-institute/the-turing-way/blob/main/book/website/figures/reproducible-definition-grid.svgEnglish (UK)reproducible; definition; replicable; generalisable; robust; data analysis; open science; open life science; the turing wayAlt Text: Grid with the characteristics of: Reproducible; same data, same analysis. Replicable; different data, same analysis. Robust; same data, different analysis. And generalisable; different data, different analysis; Research

Ventajas y dificultades

Ventajas Dificultades
Historial completo del proyecto Incentivos limitados
Colaboración y Revisión Sesgo de las investigaciones hacia hallazgos novedosos
Evita la desinformación Se aplican mayores estándares a las investigaciones reproducibles
Escritura eficiente No es considerado para las promociones
Reconocimiento justo Variabilidad en el rendimiento de los software utilizados
Asegura la continuidad del trabajo Que una investigación sea reproducible no significa que esté correcta
Toma más tiempo

Etapas de una Investigación Reproducible

Ciencia Abierta

Crisis de la reproducibilidad?

“1.500 scientist lift the lid on reproducibility” (Baker 2016)

Difusión y citas

“Point of View: How open science helps researchers succeed” (McKiernan et al. 2016)

Datos Abiertos

Solo una proporción muy pequeña de los datos originales se publica en revistas convencionales o investigaciones públicas. A pesar de las políticas existentes sobre el archivo de datos, en la actualidad, los datos se almacenan principalmente en archivos privados, no en repositorios institucionales seguros, y se pierde a ellos por parte del público general.

Esta falta de intercambio de datos es un obstáculo para la investigación internacional (ya sea académica, gubernamental o comercial) por dos razones principales:

  • Generalmente es difícil o imposible reproducir un estudio sin los datos originales.

  • Los datos no pueden ser reutilizados o incorporados en nuevos trabajos por otros investigadores si no pueden acceder a ellos.

Barreras para el intercambio de datos

Software de Código abierto

Cuando un proyecto es de código abierto, cualquiera puede ver, usar, modificar y distribuir el proyecto para cualquier propósito. Estos permisos se aplican a través de una licencia de código abierto

¿Cómo los software de código abierto benefician la investigación?

  • Re-usable

  • Comprobable

  • Colaborativo

Espectro de Reproducibilidad

Repositorio para este curso

Sofware necesarios

R project

https://cran.dcc.uchile.cl/

RSudio IDE

https://posit.co/download/rstudio-desktop/

Existen otras alternativas más génericas como Visual Studio Code, un editor de código para múltiples lenguajes. Sin embargo, al no ser un software especializado en R, requiere utilizar extensiones para lograr las funcionalidad que otorga RStudio.

Quarto

https://quarto.org/docs/get-started/

Git & Github

Módulo 2: Control de versiones

Control de versiones

Git

Sistema de control de versiones distribuido que se utiliza para el seguimiento de cambios en archivos de desarrollo software.

Motivación para utilizar control de versiones

  • Es primordial para seguir la procedencia de la información.

  • Crea versiones históricas que nos permiten entender que cambios fueron realizados.

  • Facilita el manejo de distintas versiones de archivos.

  • Permite seguir y combinar cambios realizados por distintas personas.

Flujo de trabajo

El control de versiones es un enfoque sistemático para registrar los cambios realizados en un archivo o conjunto de archivos a lo largo del tiempo.

Un flujo de trabajo típico para usar control de versiones es:

  1. Crear archivos
  2. Trabajar sobre estos archivos
  3. Crear un snapshot del estado del archivo (también llamado versión)
  4. Documentar que cambios fueron realizados en el historial de la versión del archivo

Elementos de Git

  • Repositorio: Lugar donde se almacenan todos los archivos, carpetas e historial del proyecto.

  • Commit: Registro de los cambios realizados en los archivos del proyecto en un momento específico.

  • Ramas (o “Branches”): Espacios de trabajo independientes del desarrollo principal.

  • Fusiones (o “Merges”): Representa la acción de incorporar los cambios de una Rama (Branch) a otra.

  • Repositorios remotos: Copias del repositorio almacenadas en un servidor central o en otros equipos.

Repositorio

El Repositorio de un proyecto corresponde al almacén de datos que contiene todos los archivos, carpetas y el historial de cambios del proyecto.

Un repositorio de Git puede estar:

  • Estar ubicado localmente en la computadora de un desarrollador.

  • De forma remota en un servidor.

Ramas (Branches)

Supongamos que quiero agregar o probar algo nuevo en un archivo antes de que se vea reflejado en archivo principal. ¿Cómo puedo mantener un registro de esto?

Sub-ramas (Sub-Branches)

¿Cómo uso Git y Github?

Si deseamos tener una control de versión LOCAL, debemos crear un proyecto en RStudio

Conectar RStudio con Github

Para guardar nuestras versiones en Github debemos seguir los siguientes pasos:

  1. Crear un token de acceso personal (PAT) en Github
  1. Almacener el token de acceso personal (PAT)
  1. Crear repositorio en Github (via web o aplicación de escritorio)

  2. Crear nuevo proyecto (Versión de control > Git > URL del repositorio)

Push & Pull

Git para proyectos de investigación

  • Versiones para conjuntos de datos, requieren especial cuidado
  • Estructura de carpetas específician ayudan en el flujo de trabajo

Estructura de un repositorio

Crear un Nuevo Repositorio

Para crear un repositorio local:

  1. Hacer clic en File > New Repository.

  2. Completar la información que se muestra a continuación:

    • Name: mi-pagina-web
    • Description: “Repositorio para mi sitio web con Quarto”
    • Local Path: Elige una carpeta en tu computadora donde se almacenará el repositorio.
    • Git Ignore Template: Selecciona None.
    • License: Seleccionar algún tipo de licencia o None (se puede modificar más adelante).
  3. Hacer clic en Create Repository.

  4. Ahora que el repositorio está creado, se puede modificar y crear archivos.

Conectar RStudio y Github

  1. Crear una cuenta en GitHub
  2. Crear un token de acceso personal (PAT) en GitHub
library(usethis)
create_github_token()
  1. Almacenar credenciales
library(gitcreds)
gitcreds::gitcreds_set()

RStudio

  1. Tener un proyecto local
  2. Realizar un commit inicial
  3. Escribir:
library(usethis)
usethis::use_github()

Esto creará un repositorio con el nombre del proyecto

  1. Utilizando la interface en RStudio, podremos mantener el control de versiones.

Control de versiones para datos

Importancia del control de versiones para datos

  • Los datos utilizados en los análisis no son estáticos

  • Los datos pueden mutar no sólo debido a que se ingresa nueva información

  • En muchas investigaciones se desea experimentar con diferentes versiones del mismo conjunto de datos

  • Controlar las versiones de conjuntos de datos o de archivos grandes ayuda a la reproducibilidad de un proyecto

Desafíos en el control de versiones para datos

La principal limitación que tiene Git es que conforme la cantidad y tamaño de los archivos en el proyecto crecen, se vuelve impracticable el control de versiones.

  • Usualmente un repositorio se considera grande cuando su tamaño es sobre 1 TB

Herramientas en el control de versiones para datos

Entre las herramientas más usadas para el control de versiones para grandes archivos están:

  • Data Version Control: Particularmente útil cuando se trabaja con muchos modelos, pues puede registrar el desempeño de modelos pre-establecidos commit tras commit.

Administración de datos de investigación

El estándar para investigaciones reproducibles es que los datos cumplan con los principios FAIR

FAIR

“The FAIR Guiding Principles for scientific data management and stewardship”

Módulo 3: Ambientes reproducibles

Ambientes reproducibles

Cada computador es un ambiente computacional único que consiste de un sistema operativo, los softwares instalados, sus respectivas versiones entre otras características.

Supongamos que un proyecto de investigación se lleva a cabo en un computador pero luego se transfiere a un computador diferente. No habrá una garantía que el análisis podrá ser realizado o que generará los mismos resultados si estos dependen de algunas de las características mencionadas.

Para que una investigación sea reproducible, el ambiente computacional en el que se conduce debe poder ser replicado.

¿Qué es un ambiente computacional?

En términos generales, un ambiente computacional es un sistema donde un programa se ejecuta. Esto incluye las características de hardware y software

Replicar los ambientes computacionales tendrá un potencial impacto en:

  • Investigadores

  • Colaboradores

Capturando el ambiente computacional

Categorías:

Sistema de admininistración de paquetes

Los sistemas de administración de paquetes son herramientas usadas para instalar y mantener un seguimiento del software usado en un sistema. Los archivos utilizados pueden ser compartidos con otros para que repliquen el ambiente computacional.

Ejemplos:

Binder

Binder es un servicio que genera versiones funcionales de proyecto desde un repositorio git y los sube a la nube. Estos proyectos “binderizados” son accesibles desde un navegador de internet.

Binder requiere que el software (y óptimamente, sus versiones) necesario para ejecutar un proyecto sea especificado.

Máquinas virtuales

Las máquinas virtuales son computadores simulados. Un usuario puede crear un computador “virtual” fácilmente, especificando el sistema operativo que quieren tener, entre otras características, y ejecutarlo como cualquier otra aplicación.

Contenedores

Los contenedores proveen muchos de los beneficios de una máquina virtual, pues esencialmente actúan como máquinas independientes que contienen sus propios archivos, softwares y configuraciones.

La diferencia radica en que una máquina virtual incluye un sistema operativo junto con sus softwares, independientemente si el proyecto los utiliza. En cambio, los contenedores sólo incluyen el software y archivos explícitamente definidos para ejecutar un proyecto particular.

Ejemplos: Renv

  1. Creamos un nuevo proyecto
  2. Seleccionamos la opción de utilizar renv en el nuevo proyecto
  3. Alternativamente podemos utilizar el comando renv::init() para proyectos existentes
  4. Trabajamos en el código, instalando o sacando paquetes conforme sea necesario
  5. Usamos el comando renv::snapshot() para capturar el ambiente
  • El comando renv::init() tendremos opciones para restaurar, descartar o activar el ambiente computacional
  • El comando renv::dependencies() nos entrega los paquetes de los cuales depende nuestro proyecto.

Ejemplos: Conda

  1. Instalar Anaconda
  2. Seleccionar pestaña Environment
  3. Crear ambiente de proyecto (R, Python o ambos)
  4. Utilizar RStudio desde anaconda.

BinderHub

Caso práctico

Generaremos un proyecto desde cero que tenga las siguientes características:

  • Repositorio en Github
  • Código de R + Administrador de paquetes

Módulo 4: Herramientas básicas

LaTeX

¿Que es LaTeX?

Software de composición de textos

  • Consiste en un software de uso libre, capaz de generar documentos escritos de alta calidad.

  • Le da prioridad a la estructura lógica del texto, permitiendo mantener una mayor trazabilidad y orden en el contenido.

  • Se utiliza ampliamente en el contexto de artículos y documentación científica, debido a su facilidad para trabajar formulas matemáticas.

LaTeX vs Word

LaTeX vs Word

Categoría MS Word LaTeX
Facilidad de uso Relativamente fácil de usar Difícil de aprender. Fácil una vez que se entiende la estructura de los documentos.
Eficiencia Excelente para documentos cortos. No escalable. OK para documentos cortos. Excelente para documentos técnicos y extensos.
Calidad Es posible redactar documentos bien formateados, pero requiere mucho tiempo dada las limitaciones de word. Fácil creación de documentos bien formateados.
Características Herramientas limitadas. Muchas herramientas vía extensiones.
Precio De pago, pero existen alternativas gratis como Google Docs. Gratis (Open-source)

Instalación de LaTeX

\(\LaTeX\) local:

Instalación de LaTeX

\(\LaTeX\) online:

Usos de Latex

  • Documentos Académicos

  • Libros y Revistas

  • Presentaciones

  • Documentos Técnicos

  • Documentos Matemáticos y Científicos

  • Cartas y Documentos Formales

  • Generación Automatizada de Documentos

Ofrece flexibilidad, manteniendo un formato coherente y formal, además de tener la capacidad de gestionar referencias cruzadas, bibliográficas y fórmulas matemáticas.

Herramientas para escribir en LaTeX

Definidos como Editores de texto, consisten en la aplicación que le permite a un usuario escribir el LaTeX.

  • Editores de Latex: Creados exclusivamente para escribir en LaTeX.

  • Editores de Texto Avanzado: Abarcan mas lenguajes que LaTeX.

  • Editores en Línea: Basados en el navegador con funciones de colaboración en tiempo real.

Elementos basicos de LaTeX

Para la siguiente parte del curso usaremos Overleaf

Estructura básica de LaTeX

Formato \(\rightarrow\) Portada \(\rightarrow\) Contenido

Formato

Antes de empezar a editar la portada o el contenido del documento es importante definir los parámetros que condicionaran el formato y el orden que seguirá el texto.

Definición del Documento de LaTeX: documentclass{ }

\documentclass{article}

Paquetes: usepackage{ }

Algunas funciones requieren de paquetes (librerías) para que el software las reconozca. Para aprovechar estas funciones se debe especificar que paquetes deben ser reconocidos a la hora de compilar el documento

\usepackage{package}

Paquetes principales

  • graphicx: Permite la inclusión y manipulación de gráficos, imágenes y figuras en el documento.
  • amsmath: Proporciona mejoras en la composición de fórmulas matemáticas y símbolos.
  • babel: Facilita la escritura de documentos en diferentes idiomas, adaptando la tipografía y reglas de formato correspondientes.
  • inputenc: Permite la especificación del juego de caracteres de entrada, por ejemplo UTF-8.
  • fontenc: Define cómo los caracteres se representan en el documento final y permite utilizar fuentes con codificación T1, entre otras.
  • hyperref: Permite la creación de enlaces internos y externos en el documento.
  • geometry: Facilita el ajuste de los márgenes y tamaños de página del documento.
  • fancyhdr: Permite personalizar los encabezados y pies de página.
  • listings: Permite resaltar y formatear código fuente de programación.
  • float: Mejora el posicionamiento de objetos flotantes como tablas y figuras.

Templates

Overleaf nos entrega un sin fin de templates para nuestros documentos. Disponibles aquí

Ejemplo básico

Creación del Documento y definición de parámetros.

\documentclass{article}  %Definición del Documento

\usepackage[spanish]{babel}  %Configuración de Idioma

\usepackage[letterpaper,
            top=2cm,
            bottom=2cm,
            left=3cm,
            right=3cm,
            marginparwidth=1.75cm]{geometry} %Parámetros 

%Paquetes de ejemplo

\usepackage[utf8]{inputenc}
\usepackage{underscore}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[colorlinks=true, allcolors=blue]{hyperref}
\usepackage{datetime}
\usepackage{ragged2e}
\usepackage{parskip}
\newdateformat{monthyeardate}{%
\monthname[\THEMONTH], \THEYEAR}

\title{Latex}  %Titulo
\author{Eloy Alvarado}      %Autor

\begin{document}  %Inicio del Contenido

Portada

\begin{titlepage} %Inicio portada

%Imagen
\begin{figure}[h]
\vspace{10mm}  %Espacio Vertical
\centering
\includegraphics[scale=0.15]{logo_usm.png} %Logo USM
\end{figure}

\vspace{50mm}
\begin{center} 
\hrule         %Linea Horizontal
\vspace{2mm}
{\Huge \textbf{\sc Presentación}}\\ %Titulo
\vspace{2mm}
{\Large \sc{Latex}}
\vspace{2mm}
\hrule
\vspace{1cm}


\centering
\textbf{Autor:     Eloy Alvarado} \\ %Autor

\vfill
\textsc{\monthyeardate\today}\\[0.5cm] %Fecha
\end{center}


\end{titlepage}

Portada

Contenido

\section{Contenido}

\justifying
En este documento de LaTeX, se presenta de manera 
detallada y exhaustiva el contenido que se puede 
incluir en el mismo. A través del lenguaje de 
marcado LaTeX, es posible crear y formatear textos
de forma justificada, permitiendo así una 
presentación clara y profesional. Además, LaTeX 
ofrece la flexibilidad para incorporar fórmulas
matemáticas dentro del propio texto, lo que resulta 
especialmente útil para expresar
conceptos matemáticos de manera precisa y elegante.

\subsection{Formato de Texto}
LaTeX entrega la libertad de modificar el texto 
según las necesidades de quien edita, permitiendo: 

\begin{itemize}
    \item Textos centrados:
    
            LaTeX \centering

    \item Textos a la derecha: \justifying

            LaTeX \raggedleft

    \item Textos en Negrita: \textbf{LaTeX} 
    \justifying

    \item Textos en Cursiva: \textit{LaTeX}  

    \item Textos en otra tipografía: \texttt{LaTeX}
\end{itemize}

Entre muchas opciones más.

\justifying
\subsection{Matemática}

Respecto a la matemática, la principal 
de este software, existen múltiples de 
materializarla.

\vspace{10mm}

\textbf{Modo de ecuación numerada}: para que 
el documento asocie la ecuación a un numero de 
forma automática permitiendo hacer referencia
a ella en el texto.

\centering
\begin{math}
\sqrt{x^2+1}
\end{math}

\justifying

\vspace{10mm}

\textbf{Modo de ecuación sin enumerado}: Para que 
quede centrada y quede en una linea separada, 
dandole mas enfasís.

\[\sqrt{x^2+1}\] 

$$\sqrt{x^2+1}$$

\textbf{Modo en línea}: para incluir formulas
dentro del texto $\sqrt{x^2+1}$

\end{document}

Portada

Texto

El texto en Latex se escribe directamente, si es que no se le desea asignar algún formato.

El término neolatino 'Plantae' y el castellano 'plantas' 
derivan del latín planta (brote, retoño), plantare 
(quedarse allí donde las plantas de los pies tocan el suelo).
Desde este punto de vista, podríamos llamar planta a cualquier
ser plantado en el suelo o en un sustrato; sin embargo, 
podemos ver excepciones en algunos briófitos y en la angiosperma
lenteja de agua, que no están fijos, pero los consideramos plantas.


Texto

Para destacar y darle un formato especifico al texto anterior existen múltiples comandos, siendo los principales

\textbf{Texto en Negrita}
\textit{Texto en Cursiva}

Ajustando el texto anterior

El término neolatino \textit{'Plantae'} y el castellano \textit{'plantas'} 
derivan del latín \textbf{planta} (brote, retoño), \textbf{plantare} 
(quedarse allí donde las plantas de los pies tocan el suelo).
Desde este punto de vista, podríamos llamar planta a cualquier
ser plantado en el suelo o en un sustrato; sin embargo, 
podemos ver excepciones en algunos \textbf{briófitos} y en la \textbf{angiosperma}
lenteja de agua, que no están fijos, pero los consideramos plantas.


Parrafos

Para separar párrafos en LaTeX, basta con colocar una linea en blanco entre párrafos.

...sin embargo, podemos ver excepciones en algunos \textbf{briófitos} y 
en la \textbf{angiosperma} lenteja de agua, que no están fijos, pero 
los consideramos plantas.

Por otro lado, el concepto moderno de planta, viene del sistema de 
clasificación de Haeckel, quien descarta el antiguo reino vegetal,
creando un nuevo reino Plantae con un sentido más natural y con sus
características comunes, por lo que este nuevo reino no admite como
miembros a otros organismos que no están relacionados con las plantas
terrestres, como sucede con las bacterias, los hongos y las protistas en general.

Es necesario tener el paquete parskip para que lo anterior funcione

Jerarquía de Texto

LaTeX basa su jerarquía en Secciones y Subsecciones, las cuales son ordenadas automáticamente según el orden lógico que siguen.

\section{Planeta}
Tierra

\subsection{Pais}
Chile

\subsubsection{Ciudad}
Santiago de Chile

Portada

Listados

Para hacer un listado en LaTeX se tiene que empezar una “Itemización” o “Enumeración”.

Los elementos de estos listados se denominan items:

\subsubsection{Números}

\begin{enumerate}
  \item Uno
  \item Dos
  \item Tres
\end{enumerate}

Portada

\subsubsection{Animales}

\begin{itemize}
  \item León
  \item Perro
  \item Gato
\end{itemize}

Portada

Referencias y Bibliografia

Para Insertar citas y referencias es necesario adjuntar al documento de LaTeX un archivo bib (Base de datos en BibTex) que contendrá la información bibliográfica de las fuentes citadas en el documento.

Las entradas en este documento tienen la siguiente sintaxis:

@article{Smith2021,  %Identificador de Referencia
  author = {John Smith and María López},
  title = {Environmental Challenges in Chile: A Case Study of the Atacama Desert},
  journal = {Environmental Science Journal},
  volume = {25},
  number = {3},
  pages = {201--215},
  year = {2021},
  doi = {10.12345/esj.2021.25.3.201},
  publisher = {Springer}
}

Si se desease utilizar la referencia anterior en una cita se debe adjuntar el comando

\cite{Smith2021}

Gestión Bibliográfica

Si bien en \(\LaTeX\) requiere un archivo .bib que guarde las referencias que utilizaremos, existen gestores de referencias bibliográficas que nos permiten construir fácilmente este archivo.

Bibliografía

Para incorporar la bibliografía al texto incluímos:

\bibliographystyle{plain}
\bibliography{refs}

¿Por qué Latex?

  • En términos Visuales, la calidad tipográfica genera documentos con un aspecto profesional y agradable a la vista.

  • Por su construcción lógica, LaTeX separa el contenido del documento de su formato, lo que garantiza una consistencia y uniformidad en la apariencia del documento.

  • Ofrece alta Portabilidad debido a que los documentos LaTeX son compatibles con múltiples plataformas, facilitando la colaboración y el intercambio de documentos.

  • Es muy cómodo para la construcción y composición de expresiones matemáticas complejas.

Escritura técnica

\[\begin{equation} z=\overbrace{\underbrace{x}_\text{real}+i\underbrace{y}_\text{imaginario}}^\text{numero complejo} \end{equation}\]

\begin{equation}
z=\overbrace{\underbrace{x}_\text{real}+
i\underbrace{y}_\text{imaginario}}
^\text{numero complejo}
\end{equation}

\[\begin{equation} A \xleftarrow{\text{Izquierda}} B \xrightarrow[\text{Derecha}]{ } C \end{equation}\]

\begin{equation}
A \xleftarrow{\text{Izquierda}} B 
  \xrightarrow[\text{Derecha}]{ } C
\end{equation}

\[\begin{equation} x = a_0 + \frac{1}{a_1 + \frac{1}{a_2 + \frac{1}{a_3 + a_4}}} \end{equation}\]

\begin{equation}
  x = a_0 + \frac{1}{a_1 +
  \frac{1}{a_2 +
  \frac{1}{a_3 + a_4}}}
\end{equation}

Overleaf + GitHub

Overleaf tiene integraciones con distintas herramientas:

  • Dropbox
  • GitHub
  • Mendeley
  • Zotero

entre otros. Sin embargo, muchas de estas integratciones requieren una cuenta premium.

Ejercicio práctico

Escoger un informe y replicar su contenido en \(\LaTeX\) (incluida la bibliografía), guardando el proyecto en un repositorio GitHub.

Para esto se puede usar un template o desde cero.

R & RStudio

La discusión eterna

Ambos lenguajes nos permiten realizar investigaciones reproducibles.

R + Python

R y Python no son mutuamente excluyentes

Código python en R

El paquete reticulate nos permite ejecutar código Python en nuestros archivos R.

  1. Instalamos y cargamos el paquete
install.packages("reticulate")
  1. Configuramos la dirección de nuestro python local
library(reticulate)
use_python("/home/ealvnrz/anaconda3/bin/python")
  1. Ejecutamos código python
py_run_string("def Psq (x):
                value= x*x
                return(value)")
  1. Utilizamos la función en R
py$Psq(3)

También es posible ejecutar código R en Python utilizando la librería rpy2

Programando en R

En lo que resta del curso, asumiremos que se tiene un nivel básico de R; esto es, conocer los operadores básicos de R: funciones, operaciones matemáticas y objectos (vectores, escalares, etc.)

Para una introducción a R, ver Introducción a R del R Development Core Team

Tipos de Datos

Cada objeto en R es de un tipo base y sólo R-core puede crear nuevos tipos

Tipos de datos base

Existen 5 tipos de datos base: double, integer, complex, logical y character. Estos también pueden ser tipo NULL.

Sin importar la complejidad del análisis, en R todos los datos son interpretados como alguno de estos tipos base

Tipos de datos base

typeof(3.14)
[1] "double"
typeof(1L)
[1] "integer"
typeof(3i)
[1] "complex"
typeof(TRUE)
[1] "logical"
typeof('USM')
[1] "character"
typeof(NULL)
[1] "NULL"

Estructuras de Datos

Matrices (arreglos)

Una característica distintiva de las matrices es que todos los valores son del mismo tipo de dato

Vectores y coerción de tipos

Los vectores son matrices 1-dimensionales.

Estructuras de Datos

vector <- vector(length = 3)
vector
[1] FALSE FALSE FALSE
typeof(vector)
[1] "logical"
vector_char <- vector(mode = "character", length = 3)
vector_char
[1] "" "" ""
typeof(vector_char)
[1] "character"

Coerción

¿Qué producirá el siguiente código?:

ex <- c(2,6,"3")

Respuesta:

[1] "2" "6" "3"

En lo anterior, se realizó una coerción de tipo. No tener claridad de cómo funciona esto, es lo que usualmente dificulta programar correctamente un código en R.

Coerción

La coerción ocurre cuando ingresamos datos de distinto tipo en un objeto que sólo permite que sus valores sean de un sólo tipo

Reglas de coerción:

logical -> integer -> numeric -> complex -> character

Leemos -> como “puede ser transformado en”

Ejemplos de coerción

logical -> character

c("a", TRUE)
[1] "a"    "TRUE"
c("FALSE", TRUE)
[1] "FALSE" "TRUE" 

logical -> numeric

c(0, TRUE)
[1] 0 1

Es posible forzar una coerción utilizando as.

chars <- c("0","3","4")
as.numeric(chars)
[1] 0 3 4
as.logical(chars)
[1] NA NA NA
as.logical(as.numeric(chars))
[1] FALSE  TRUE  TRUE
as.numeric(c("FALSE", TRUE))
[1] NA NA

Listas

Las listas puede guardar objetos de cualquier tipo o clase

list(1, "a", TRUE)
[[1]]
[1] 1

[[2]]
[1] "a"

[[3]]
[1] TRUE

Objectos S3, S4 Y S6

Las matrices y listas tienen un tipo base inmutable. En contraste, en R existen los objetos S3, S4 y S6; siendo S3 el más común.

Estos objetos tienen un atributo de clase, que permite que existan funcionalidad especificas para aquella clase. Esto es una característica principal de la programación orientada a objetos

Data.frames

El objeto S3 más importante en R es el data.frame, que son un tipo especial de lista

df <- data.frame(id = 1:3, 
                 tratamiento = c("a", "b", "b"), 
                 estado = c(TRUE, TRUE, FALSE))
df
  id tratamiento estado
1  1           a   TRUE
2  2           b   TRUE
3  3           b  FALSE

Data.frames

typeof(df)
[1] "list"
class(df)
[1] "data.frame"
sloop::otype(df)
[1] "S3"

Flujo de trabajo

Principios

  • tibbles como estructura principal de datos
  • Tidy data, donde las filas son observaciones particulares y las columnas las variables observadas
  • Canalizar las salidas de las funciones como entradas de otras.

Núcleo de Tidyverse

Tibble

tibbles es una de las características unificadoras de tidyverse; es la versión tidyverse de los objetos data.frame

Sus características principales son:

  • Mejor comportamiento en su impresión
  • No permite la coerción de caracteres a factores
  • Manejo los errores de manera más robusta

Data.frame a tibble

Para transformar un objeto data.frame a tibble escribimos:

trees_tbl <- tibble::as_tibble(datasets::trees)
trees_tbl
# A tibble: 31 × 3
   Girth Height Volume
   <dbl>  <dbl>  <dbl>
 1   8.3     70   10.3
 2   8.6     65   10.3
 3   8.8     63   10.2
 4  10.5     72   16.4
 5  10.7     81   18.8
 6  10.8     83   19.7
 7  11       66   15.6
 8  11       75   18.2
 9  11.1     80   22.6
10  11.2     75   19.9
# ℹ 21 more rows

Para crear conjuntos de datos tibble escribimos:

tibble::tibble(
    x = 1:5, 
    y = 1, 
    z = x ^ 2 + y
)
# A tibble: 5 × 3
      x     y     z
  <int> <dbl> <dbl>
1     1     1     2
2     2     1     5
3     3     1    10
4     4     1    17
5     5     1    26

readr

El paquete readr contiene funciones simples y consistentes para importar datos guardados como documentos de archivo sin formato. Ofrece una alternativa a las funciones básicas de R.

Entre sus principales ventajas están:

  • Es ~10 veces más rápido que las funciones de lectura de datos de R base.
  • Entre datos en formato tibble
  • Tiene configuraciones más intuitivas por defecto: No nombres por fila y no stringsAsFactors = TRUE

Funciones de lectura

Funciones Lee
read_csv() Comma separated values
read_csv2() Semi-colon separate values
read_delim() General delimited files
read_fwf() Fixed width files
read_log() Apache log files
read_table() Space separated files
read_tsv() Tab delimited values

Funciones de escritura

Funciones Escribe
write_csv() Comma separated values
write_excel_csv() CSV que se planea abrir en Excel
write_delim() General delimited files
write_file() Un string, escrito tal como está
write_lines() Un vector de strings, un string por línea
write_tsv() Tab delimited values

Otro tipos de datos

Existen otros paquetes que nos permiten leer archivos en distintos formatos, entre ellos:

Paquete Lee
haven Archivos de SPSS, Stata y SAS
readxl Archivos excel (.xls, .xlsx)
jsonlite json
xml2 xml
httr web API’s
rvest Páginas web (web scraping)
DBI databases
sparklyr datos cargados en spark

dplyr

El paquete dplyr es una gramática para la manipulación de datos. Sus funciones se definen como verbos.

Entre las funciones más utilizadas en este paquete se encuentras:

  • %>%
  • group_by & filter
  • mutate
  • select

tidyr

El paquete tidyr tiene por finalidad transformar los datos en formato tidy.

ggplot2

El paquete ggplot2 es un sistema para crear gráficos de manera declarativa. Se provee los datos, se configura como relacionar las variables a lo elementos estéticos, que estilo de gráfico se desea y el paquete hace el resto.

En general, la estructura de un gráfico de ggplot es:

ggplot(data.frame, aes(nombres_de_columna)) + geom_algo(argumentos, 
    aes(columnas))

Los gráficos creados con ggplot2 se ha vuelto el estándar para las investigaciones reproducibles. Existen múltiples extensiones que complementan a ggplot2. También hay un repositorio que los pone a disposición.

ggplot2

Diagrama general

Diagrama general

Tidymodels

  • rsample nos entrega herramientas para realizar diferentes tipos de muestreo
  • recipes nos entrega herramientas para organizar el preprocesamiento y el feature engineering
  • parsnip nos entrega herramientas para definir modelos
  • yardstick nos entrega herramientas para calcular métricas de desempeño de los modelos
  • workflows nos entrega herramientas para combinar las etapas de preprocesamiento y creación de modelos

parsnip

Podemos utilizar parsnip_addin() para ver los modelos compatibles con el paquete.

recipes

Módulo 5: Casos prácticos

Ejemplo práctico

library(tidyverse)
library(palmerpenguins)
penguins
# A tibble: 344 × 8
   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
 1 Adelie  Torgersen           39.1          18.7               181        3750
 2 Adelie  Torgersen           39.5          17.4               186        3800
 3 Adelie  Torgersen           40.3          18                 195        3250
 4 Adelie  Torgersen           NA            NA                  NA          NA
 5 Adelie  Torgersen           36.7          19.3               193        3450
 6 Adelie  Torgersen           39.3          20.6               190        3650
 7 Adelie  Torgersen           38.9          17.8               181        3625
 8 Adelie  Torgersen           39.2          19.6               195        4675
 9 Adelie  Torgersen           34.1          18.1               193        3475
10 Adelie  Torgersen           42            20.2               190        4250
# ℹ 334 more rows
# ℹ 2 more variables: sex <fct>, year <int>

Explorando los datos

penguins %>%
  filter(!is.na(sex)) %>%
  ggplot(aes(flipper_length_mm, bill_length_mm, color = sex, size = body_mass_g)) +
  geom_point(alpha = 0.5) +
  facet_wrap(~species)

penguins_df <- penguins %>%
  filter(!is.na(sex)) %>%
  select(-island)

Construyendo un modelo

Separación conjunto de entrenamiento y prueba

library(tidymodels)
set.seed(123)
penguin_split <- initial_split(penguins_df, strata = sex)
penguin_train <- training(penguin_split)
penguin_test <- testing(penguin_split)
penguin_split
<Training/Testing/Total>
<249/84/333>

Remuestreo de los datos

set.seed(123)
penguin_boot <- bootstraps(penguin_train)
penguin_boot
# Bootstrap sampling 
# A tibble: 25 × 2
   splits           id         
   <list>           <chr>      
 1 <split [249/93]> Bootstrap01
 2 <split [249/91]> Bootstrap02
 3 <split [249/90]> Bootstrap03
 4 <split [249/91]> Bootstrap04
 5 <split [249/85]> Bootstrap05
 6 <split [249/87]> Bootstrap06
 7 <split [249/94]> Bootstrap07
 8 <split [249/88]> Bootstrap08
 9 <split [249/95]> Bootstrap09
10 <split [249/89]> Bootstrap10
# ℹ 15 more rows

Definiendo modelos

Para este ejemplo realizaremos un modelo de regresión logística y un random forest para predecir el sexo de los pingüinos.

glm_spec <- logistic_reg() %>%
  set_engine("glm")
glm_spec
Logistic Regression Model Specification (classification)

Computational engine: glm 
rf_spec <- rand_forest() %>%
  set_mode("classification") %>%
  set_engine("ranger")
rf_spec
Random Forest Model Specification (classification)

Computational engine: ranger 

Flujo de trabajo

penguin_wf <- workflow() %>%
  add_formula(sex ~ .)
penguin_wf
══ Workflow ════════════════════════════════════════════════════════════════════
Preprocessor: Formula
Model: None

── Preprocessor ────────────────────────────────────────────────────────────────
sex ~ .
glm_rs <- penguin_wf %>%
  add_model(glm_spec) %>%
  fit_resamples(
    resamples = penguin_boot,
    control = control_resamples(save_pred = TRUE)
  )
glm_rs
# Resampling results
# Bootstrap sampling 
# A tibble: 25 × 5
   splits           id          .metrics         .notes           .predictions
   <list>           <chr>       <list>           <list>           <list>      
 1 <split [249/93]> Bootstrap01 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 2 <split [249/91]> Bootstrap02 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 3 <split [249/90]> Bootstrap03 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 4 <split [249/91]> Bootstrap04 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 5 <split [249/85]> Bootstrap05 <tibble [3 × 4]> <tibble [1 × 3]> <tibble>    
 6 <split [249/87]> Bootstrap06 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 7 <split [249/94]> Bootstrap07 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 8 <split [249/88]> Bootstrap08 <tibble [3 × 4]> <tibble [1 × 3]> <tibble>    
 9 <split [249/95]> Bootstrap09 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
10 <split [249/89]> Bootstrap10 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
# ℹ 15 more rows

There were issues with some computations:

  - Warning(s) x3: glm.fit: fitted probabilities numerically 0 or 1 occurred

Run `show_notes(.Last.tune.result)` for more information.

Flujo de trabajo

rf_rs <- penguin_wf %>%
  add_model(rf_spec) %>%
  fit_resamples(
    resamples = penguin_boot,
    control = control_resamples(save_pred = TRUE)
  )
rf_rs
# Resampling results
# Bootstrap sampling 
# A tibble: 25 × 5
   splits           id          .metrics         .notes           .predictions
   <list>           <chr>       <list>           <list>           <list>      
 1 <split [249/93]> Bootstrap01 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 2 <split [249/91]> Bootstrap02 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 3 <split [249/90]> Bootstrap03 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 4 <split [249/91]> Bootstrap04 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 5 <split [249/85]> Bootstrap05 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 6 <split [249/87]> Bootstrap06 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 7 <split [249/94]> Bootstrap07 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 8 <split [249/88]> Bootstrap08 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
 9 <split [249/95]> Bootstrap09 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
10 <split [249/89]> Bootstrap10 <tibble [3 × 4]> <tibble [0 × 3]> <tibble>    
# ℹ 15 more rows

Evaluando los modelos

collect_metrics(rf_rs)
# A tibble: 3 × 6
  .metric     .estimator   mean     n std_err .config             
  <chr>       <chr>       <dbl> <int>   <dbl> <chr>               
1 accuracy    binary     0.915     25 0.00561 Preprocessor1_Model1
2 brier_class binary     0.0669    25 0.00245 Preprocessor1_Model1
3 roc_auc     binary     0.977     25 0.00212 Preprocessor1_Model1
collect_metrics(glm_rs)
# A tibble: 3 × 6
  .metric     .estimator   mean     n std_err .config             
  <chr>       <chr>       <dbl> <int>   <dbl> <chr>               
1 accuracy    binary     0.916     25 0.00637 Preprocessor1_Model1
2 brier_class binary     0.0614    25 0.00436 Preprocessor1_Model1
3 roc_auc     binary     0.978     25 0.00270 Preprocessor1_Model1

El modelo lineal tiene mejor desempeño que un random forest, por lo que lo analizamos en detalle.

Revisando el modelo lineal

glm_rs %>%
  conf_mat_resampled()
# A tibble: 4 × 3
  Prediction Truth   Freq
  <fct>      <fct>  <dbl>
1 female     female 41.0 
2 female     male    3.08
3 male       female  4.52
4 male       male   42.2 

Probando el modelo

Utilizamos el conjunto de prueba en nuestro modelo lineal

penguin_final <- penguin_wf %>%
  add_model(glm_spec) %>%
  last_fit(penguin_split)
penguin_final
# Resampling results
# Manual resampling 
# A tibble: 1 × 6
  splits           id               .metrics .notes   .predictions .workflow 
  <list>           <chr>            <list>   <list>   <list>       <list>    
1 <split [249/84]> train/test split <tibble> <tibble> <tibble>     <workflow>
collect_metrics(penguin_final)
# A tibble: 3 × 4
  .metric     .estimator .estimate .config             
  <chr>       <chr>          <dbl> <chr>               
1 accuracy    binary         0.857 Preprocessor1_Model1
2 roc_auc     binary         0.939 Preprocessor1_Model1
3 brier_class binary         0.102 Preprocessor1_Model1
collect_predictions(penguin_final) %>%
  conf_mat(sex, .pred_class)
          Truth
Prediction female male
    female     37    7
    male        5   35

Detalle del modelo

penguin_final$.workflow[[1]] %>%
  tidy(exponentiate = TRUE)
# A tibble: 8 × 5
  term              estimate std.error statistic    p.value
  <chr>                <dbl>     <dbl>     <dbl>      <dbl>
1 (Intercept)       2.22e+44 903.          0.113 0.910     
2 speciesChinstrap  1.33e- 4   2.35       -3.80  0.000147  
3 speciesGentoo     1.01e- 5   3.80       -3.03  0.00246   
4 bill_length_mm    1.91e+ 0   0.180       3.60  0.000321  
5 bill_depth_mm     8.08e+ 0   0.497       4.21  0.0000259 
6 flipper_length_mm 1.06e+ 0   0.0669      0.939 0.348     
7 body_mass_g       1.01e+ 0   0.00180     4.44  0.00000916
8 year              9.02e- 1   0.450      -0.228 0.819     

Cheatsheets

Flujo de trabajo

Proceso usual de creación de modelos

Produced by OmniGraffle 7.17.3\n2020-09-10 17:22:47 +0000 Canvas 1 Layer 1 Exploratory Data Analysis (EDA) Model #1 Model #2 Model #3 Model #4 Initial Feature Engineering Initial Models Model Evaluation More Feature Engineering Model #4a Model #1a Final Model Evaluation Refined Models Final Model

Módulo 6: Difusión de resultados

Rmarkdown & Quarto

El paquete rmarkdown provee un marco de escritura para investigaciones cuentitativas, que combina códigos, resultados y texto. Los documento R Markdown son completamente reproducibles y permiten generar archivos en distintos formatos: PDF, Word, Presentaciones y más. Quarto es la nueva generación de esta herramienta para incluir distintos lenguajes.

Algunos ejemplos

Quarto

Los archivos Quarto fueron diseñados para ser usados de tres maneras:

  1. Para comunicar a los tomadores de decisiones, quienes quieren centrarse en las conclusiones, no en el código detrás del análisis.

  2. Para colaborar con otros investigadores, quienes están interesados en las conclusiones y el cómo se llego a ellas (i.e. el código)

  3. Como un ambiente para hacer análisis, como un notebook donde se puede capturar el trabajo realizado junto a notas de este.

Primeros pasos

  1. Entrar a Quarto.org
  2. Descargar Quarto para su sistema operativo
  3. Ingresar a RStudio y crear documento .qmd

Flujo documento Quarto

  • qmd: archivo de origen
  • knitr: Herramienta que interpreta y ejecuta códigos y lo traduce en texto markdown
  • md: texto escrito en lenguaje markdown
  • pandoc: Herramienta que convierte archivos .md enb distintos formatos

Anatomía de un documento Quarto

  1. Encabezado en formato YAML
  2. Texto en formato Quarto
  3. Bloques de código (R, Python, Julia, Observable)

YAML

YAML es un formato de serialización de datos que puede ser leído fácilmente. Su uso es amplio, desde Acciones en GitHub hasta Quarto

Un ejemplo de YAML que difine un ambiente computacional podría ser:

# Define the operating system as Linux
os: linux

# Use the xenial distribution of Linux
dist: xenial

# Use the programming language Python
language: python

# Use version of Python 3.2
python: 3.2

YAML nos será de particular interés para la creación de documentos y presentaciones reproducibles, utilizando quarto.

Herramientas

El contenido del documento puede estar escrito utilizando diferentes formatos, entre ellos:

  • Quarto
  • HTML
  • LaTeX
  • CSS

Creación de documento básico

  1. Abrir RStudio
  2. File > New File > Quarto Document
  3. Definir características del documento

Markdown

Formato de Texto

Sintáxis Markdown Salida
*italics*, **bold**, ***bold italics***
italics, bold, bold italics
superscript^2^ / subscript~2~
superscript2 / subscript2
~~strikethrough~~
strikethrough
`verbatim code`
verbatim code

Encabezados

Sintáxis Markdown Salida
# Header 1

Header 1

## Header 2

Header 2

### Header 3

Header 3

#### Header 4

Header 4

##### Header 5
Header 5
###### Header 6
Header 6

Listas

Sintáxis Markdown Salida
* Lista no ordenada
    + sub-item 1
    + sub-item 2
        - sub-sub-item 1
  • Lista no ordenada
    • sub-item 1
    • sub-item 2
      • sub-sub-item 1
*   item 2

    Continuación (4 spaces)
  • item 2

    Continuación (4 spaces)

1. Lista ordenada
2. item 2
    i) sub-item 1
         A.  sub-sub-item 1
  1. Lista ordenada
  2. item 2
    1. sub-item 1
      1. sub-sub-item 1

Listas

(@)  Una lista cuyos números

continuan después

(@)  de una interrupción
  1. Una lista cuyos números

continuan después

  1. de una interrupción
::: {}
1. Una lista
:::

::: {}
1. Seguida de otra lista
:::
  1. Una lista
  1. Seguida de otra lista
término
: definición
término

definición

Tablas

Sintáxis Markdown

| Right | Left | Default | Center |
|------:|:-----|---------|:------:|
|   12  |  12  |    12   |    12  |
|  123  |  123 |   123   |   123  |
|    1  |    1 |     1   |     1  |

Output

Right Left Default Center
12 12 12 12
123 123 123 123
1 1 1 1

Código de fuente

Usamos ``` para delimitar bloques de código:

```
código
```

Podemos agregar un lenguaje para destacar el código:

```python
1 + 1
```

Pandoc ofrece 140 distintos lenguajes para destacar código.

Guía de referencia

Para una lista exhaustiva de las opciones de formato que tienen los documentos .qmd visitar https://quarto.org/docs/guide/.

Formatos de salida: Documentos

Los formatos de salida más utilizados para documentos creados con Quarto son:

Para cambiar entre estos formatos, basta especificiar la salida deseada en el YAML. Otros formatos posibles:

Formatos de salida: Presentaciones

En Quarto tenemos 3 opciones para presentaciones:

En donde RevealJS es el formato que nos entrega más herramientas. (Esta presentación fue hecha utilizando RevealJS en Quarto)

Caso práctico

Crearemos un mismo documento en distintos formatos

Awesome Quarto

Páginas web con Quarto

También se puede crear un website desde la terminal, siguiendo:

quarto create-project mi-pagina-web --type website

Lo anterior generará una estructura de carpetas como la siguiente:

mi-pagina-web/
├── _quarto.yml
├── index.qmd
└── about.qmd
  • _quarto.yml: Archivo de configuración del proyecto.
  • index.qmd: Archivo principal del sitio web.
  • about.qmd: Página adicional para el sitio.

Archivo _quarto.yml

El archivo _quarto.yml define configuraciones para personalizar el sitio web:

project:
  type: website
  title: "Página Web con Quarto"
  author: "Nombre"
  description: "sitio web creado con Quarto"
  
website:
  navbar:
    right:
      - text: "Inicio"
        href: index.qmd
      - text: "Acerca de"
        href: about.qmd

format:
  html:
    theme: cosmo
    toc: true
    toc-location: left
  • title: El título del sitio.
  • navbar: Barra de navegación con enlaces.
  • theme: Se puede cambiar el tema (e.g., cosmo, flatly, darkly).

Contenido en index.qmd

Abrir el archivo index.qmd y añadimos el siguiente contenido:

---
title: "Mi Página Web"
---

# ¡Hola, Mundo!

Esta es una página web simple creada con Quarto para el 3er Workshop de Investigación Reproducible.

## Sección 1: Introducción

Quarto te permite crear documentos y sitios web de forma rápida y sencilla.

## Sección 2: Características

- Código reproducible
- Fácil de publicar en GitHub Pages
- Compatible con múltiples lenguajes

Luego renderizar el documento

Contenido en about.qmd

---
title: "Workshop"
about:
  template: jolla
  image: profile.jpg
  links:
    - icon: twitter
      text: twitter
      href: https://twitter.com
    - icon: github
      text: Github
      href: https://github.com
---

El 3er Workshop: Investigación Reproducible con R es una iniciativa dirigida a la comunidad científica, académica y de postgrado diseñada para fortalecer las competencias en transparencia, replicabilidad y buenas prácticas en la investigación científica. 

## Fecha y lugar de realización

Se realizará desde el lunes 10 de marzo hasta el viernes 14 de marzo, en modalidad 100% online . El workshop consta de cinco módulos en cinco sesiones de dos horas cada una con un total de diez horas de formación.


Templates

Quarto incluye 5 templates para este tipo de página: jolla, trestles, solana, marquee, broadside.

Configurar GitHub Pages

  1. Crear un repositorio llamado nombre-usuario.github.io. Donde nombre-usuario sea tu nombre de usuario de GitHub.
  2. Ir a Settings > Pages.
  3. Seleccionar la rama main y la carpeta / (root), o alguna otra carpeta que sea definida para guardar los archivos del sitio web.
  4. Guardar los cambios.
  5. Luego puedes clonar el repositorio a alguna carpeta local y comenzar a trabajar. Debe contener algún archivo index.html para funcionar

El sitio web debería estar disponible en: https://usuario.github.io/mi-pagina-web

Guía de referencia

Guía de referencia para Github Pages

Para modificar la carpeta de salida del sitio web

En el archivo _quarto.yml:

project:
  type: website
  output-dir: docs

References

Baker, Monya. 2016. «1,500 scientists lift the lid on reproducibility». Nature 533 (7604).
McKiernan, Erin C, Philip E Bourne, C Titus Brown, Stuart Buck, Amye Kenall, Jennifer Lin, Damon McDougall, et al. 2016. «How open science helps researchers succeed». elife 5: e16800.
Wickham, Hadley. 2014. «Tidy Data». Journal of Statistical Software 59 (10): 1-23. https://doi.org/10.18637/jss.v059.i10.